package com.example.zz.example.serialization;

import android.os.Parcel;
import android.os.Parcelable;


/**
 * 序列化
 * 把对象转换为字节序列的过程叫做序列化
 * 把字节序列转换为对象的过程叫做反序列化
 * 序列化意义: 将java对象转化成字节序列，可以保存在磁盘或者通过网络传输，在其他设备中进行还原
 */
public class Device implements Parcelable {

    //ip地址
    private String ip;
    //端口号
    private int port;
    //唯一id
    private String uuid;

    public Device(String ip, int port, String uuid) {
        super();
        this.ip = ip;
        this.port = port;
        this.uuid = uuid;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    /**
     * 描述
     * 返回的是内容的描述信息
     * 只针对一些特殊的需要描述信息的对象,需要返回1,其他情况返回0就可以
     *
     * @return
     */
    @Override
    public int describeContents() {
        return 0;
    }

    /**
     * 序列化
     *
     * @param dest
     * @param flags
     */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(ip);
        dest.writeString(uuid);
        dest.writeInt(port);
    }

    /**
     * 负责反序列化
     */
    public static final Parcelable.Creator<Device> CREATOR = new Parcelable.Creator<Device>() {
        /**
         * 从序列化对象中，获取原始的对象
         * @param in
         * @return
         */
        @Override
        public Device createFromParcel(Parcel in) {
            return new Device(in);
        }

        /**
         * 创建指定长度的原始对象数组
         * @param size
         * @return
         */
        @Override
        public Device[] newArray(int size) {
            return new Device[size];
        }
    };

    public Device(Parcel source) {
        ip = source.readString();
        uuid = source.readString();
        port = source.readInt();
    }

}